/** @jsxImportSource @emotion/react */
import * as React from "react";
import {Button, Text, TextArea, useTheme, useToast,} from "customize-easy-ui-component";
import {InspectRecordLayout, InternalItemProps, useItemInputControl} from "../../common/base";
import {setupItemAreaRoute} from "./orcIspConfig";
import {useMedia} from "use-media";
import {assertNamesUnique} from "../../common/eHelper";
import {EditStorageContext} from "../../StorageContext";
import {EachMeasureItemConfig} from "../../common/measure";
import {itemA结论} from "./editor";
import {itemA间隙} from "./DoorGap";
// import {itemA技术见证} from "../../elevator/stest/editor";
// import {itemA监控设施} from "../../elevator/weituoDj/editMonit";
import {render设备品种, render设备类别} from "../../common/render";
import {itemA技术见证} from "../../elevator/stest/editor";
import {itemn顶空, itemn顶空2, itemn顶空3} from "./Headspace";
import {itemn底坑, itemn底坑2} from "./Pitspace";
import {itemn平衡} from "../../elevator/stest/Equilibrium";
import {itemA监控设施} from "./MonitoringFacili";


const 轿顶空调选=['有','无'];
export const config设备概况 = [
    [['统一社会信用代码', '_$使用单位信用码'], ['设备所在区域', '_$使用地区域']],
    [['使用登记证编号', '_$使用证号'], ['设备品种','_$设备品种',render设备品种] ],
    [['楼盘名称', '_$楼盘'], ['楼盘性质', '_$楼盘性质'] ],
    [['楼盘地址', '_$楼盘地址'] ],
    [['分支机构名称','_$分支机构']],
    //单位台账的属性：部门管理类型 舍去： 单位管理类型 "MGE_DEPT_TYPE_NAME": [ "无内设管理部门", "内设管理部门", "内设分支机构" ],
    [['分支机构地址','_$分支机构地址']],
    [['使用单位地址', '_$使用单位地址'] ],
    [['维保单位名称', '_$维保单位']],
    [['维保单位电话', '维保电话'], ['使用单位联系人', '_$单位联系人'], ],
    [['使用单位联系电话', '_$使用单位电话'], ['使用单位联系人手机', '_$设备联系手机'],],
    [['安装地点', '_$设备使用地点'], ['单位内编号','_$单位内部编号'],],
    [['产品型号', '_$型号'], ['产品编号', '_$出厂编号'] ],
    [['额定载重量','_$额定载荷','kg'],  ['额定速度', '_$运行速度','m/s'] ],
    [['层数','_$电梯层数','层'], ['站数', '_$电梯站数','站'] ],
    [['门数','_$电梯门数','门'], ['进口情况', '_$进口类型'] ],
    [['开门方式','_$开门方式'], ['控制方式', '_$控制方式',] ],
    [['倾斜角','_$倾斜角度','°'], ['轿门位置', '轿门位',] ],
    [['整机防爆标志','_$防爆标志',], ['区域防爆等级', '_$防爆等级'] ],
    [['制造日期', '_$制造日期'], ['改造日期', {n:'改造日期',t:'d'}] ],
    [['控制柜型号', '_$控制屏型号'], ['控制柜编号', '_$控制屏编号'] ],
    [['驱动主机型号', '_$主机型号'], ['驱动主机编号', '_$主机编号'] ],
    [['轿厢限速器型号', '_$限速器型号'], ['轿厢限速器编号', '_$限速器编号'] ],
    [['对重限速器型号', '_$对限速型号'], ['对重限速器编号', '_$对限速编号'] ],
    [['上行超速保护装置型号', '_$上行保护型号'], ['意外移动保护装置型号', '_$意外保护型号'] ],
    [['轿厢安全钳型号', '轿厢钳型'], ['对重安全钳型号', '对重钳型'], ],
    [['缓冲器型号', '_$缓冲器型号'], ['缓冲器型式', '_$缓冲器形式'] ],
    [['层门门锁型号', '层锁型'], ['轿门门锁型号', '轿锁型'] ],
    [['层门型号', '_$层门型号'], ['是否设置附加装置', '_$附加装置' ], ],
    //对重块数量或总高度 ：拆分
    [['对重块数量','_$对重块数量','块'], ['轿顶空调', {n:'轿顶空调',t:'l',l:轿顶空调选}] ],
    [['对重块总高度','对重高','m'], ['轿厢装修状态',  '_$轿厢装修'] ],
    [['平衡系数范围','平衡系范'], [' ',{r:' '}] ],
    [['制造单位名称', '_$制造单位'] , ],
    //特殊前缀列： 施工单位
    [[{pr:'施工单位名称', span:3, t:'安装单位'}, '安装单'],   ],
    [[{t:'改造单位'}, '改造单'],  ],
    [[{t:'大修单位'}, '大修单'],  ],    //大修单
    [['施工单位生产许可证编号', '施许可号'], ['施工单位许可子项目(级别)', {n: '施许可子', t: 'l', l:[] }], ],
    [['现场检验条件',{r:'见附录E'}]],
    [['建议下次检验（检测）日期','_$新下检日'], ],
    [['检验意见通知书','意通知号'], ],
    [['检验依据',{r:'参照《电梯监督检验和定期检验规则》（TSG T7001-2023）'}]],
];

/**测量表：太多了可拆成两个编辑器； 注意：t: [] 不同于 t: [undefined,undefined,undefined]；
 * */
export const config观测数据 = [
    [{n: '道门宽', t: ['A1.2.1.2','(1)','机房通道门不能向机房内开启，其高度不小于1.80m，宽度不小于0.60m。'], x:'宽度', u: 'm'},
        {n: '道门高', t: [undefined,undefined,null], x:'高度',  },
    ],
    [{check: '1.2.1.2(1)', }],
    [{n: '活区净高', t: ['A1.2.1.4','(1)','活动区域的净高度不小于1.80m；'], x:'净高度', u: 'm',c:'四',d:'1'},
        {n: '房地高差', t: [undefined,'(2)','机房地面高度不一并且相差大于0.50m时，设有楼梯或者高度不大于4.0m的固定的梯子，并且设有护栏。'], x:'高差',c:'四',d:'2'  },
    ],
    [{check: '1.2.1.4', }],
    [{n: '屏前深', t: ['A1.2.1.5','(1)','在控制柜、紧急和测试操作屏前有一块净空间，其深度不小于0.70m，宽度不小于0.50m与控制柜、紧急和测试操作屏全宽的较大者，其净高度不小于2.00m；'],
               x:'深度', u: 'm'},
        {n: '屏前宽', t: [undefined,undefined,null], x:'宽度',  },
        {n: '屏前高', t: [undefined,undefined,null], x:'高度',  },
     {n: '修净空', t: [undefined,'(2)','对运动部件进行维修和检查以及紧急操作的地方有一块不小于0.50m×0.60m的水平净空面积，其净高度不小于2.00m'],
            x:'水平净空面积', u: '‌㎡'},
        {n: '修高度', t: [undefined,undefined,null], x:'高度', u: 'm'  },
    ],
    [{check: '1.2.1.5', }],
    [{n: '围壁高', t: ['A1.2.2.2','(2)','部分封闭井道，在人员可以正常接近电梯处围壁的高度应符合该条检验项目中附图的要求；'], x:'高度', u: 'm'},
        {n: '围壁距', t: [undefined,undefined,'围壁与电梯运动部件之间的距离。'], x:'距离',  },
    ],
    [{check: '1.2.2.2(2)', }],
    [{n: '厢壁间距', t: ['A1.2.2.3','(1)','轿厢(运载装置)与面对轿厢(运载装置)口的井道壁的间距不大于0.15m，对于采用垂直滑动门的载货电梯或者局部高度不大于0.50m的，该间距可以增加到0.20m。'],
                    x:'间距', u: 'm'},
        {n: '载货间距', t: [undefined,undefined,null], x:'局部高度≤0.5m时或采用垂直滑动门的载货电梯时，间距',  },
    ],
    [{check: '1.2.2.3(1)', }],
    [{n: '坎下壁高', t: ['A1.2.2.4','(2)',<Text css={{fontSize:'0.875rem'}}>对于非斜行电梯，层门地坎下井道壁的高度不小于开锁区域的1/2加上50mm，宽度不小于门入口的净宽度
            两边各加25mm;对于斜行电梯，其尺寸能够覆盖地坎下面整个入口宽度两边各加上50mm和开锁区域下面加上50mm。</Text>], x:'高度', u: 'mm'},
        {n: '坎下壁宽', t: [undefined,undefined,null], x:'宽度',  },
    ],
    [{check: '1.2.2.4(2)', }],
    [{n: '安门高', t: ['A1.2.2.5.1','(2)','安全门不能向井道内开启，其高度不小于1.80m，宽度不小于0.35m。'], x:'高度', u: 'm'},
        {n: '安门宽', t: [undefined,undefined,null], x:'宽度',  },
    ],
    [{check: '1.2.2.5.1(2)', }],
    [{n: '坑障下高', t: ['A1.2.2.8','(1)','从底坑地面到隔障的最低部分不大于0.30m；'], x:'隔障下端离地高度', u: 'm'},
        {n: '坑障上高', t: [undefined,'(2)','从对重完全压缩缓冲器的位置起或者平衡重位于最低位置起，延伸到底坑地面以上至少2.00m处。'], x:'隔障上端离地高度',  },
    ],
    [{check: '1.2.2.8', }],
    [{n: '障下端高', t: ['A1.2.2.9','(1)',<Text css={{fontSize:'0.875rem'}}>在装有多台电梯的井道中，不同电梯的运动部件之间设有刚性隔障，该隔障从底坑地面不大于0.30m处向上延
            伸至底层端站楼面以上至少2.50m高度，并且有足够的宽度防止人员从一个底坑通往另一个底坑。</Text>], x:'隔障下端离地高度', u: 'm'},
        {n: '障上端高', t: [undefined,undefined,null], x:'隔障上端离底层端站楼面高度',  },
        {n: '邻斜障高', t: [undefined,'(3)',<Text css={{fontSize:'0.875rem'}}>对于井道内允许人员行走的斜行电梯，还应当沿着井道在相邻的电梯间设置隔障，隔障高度H≥(2.50-D)m，并且H≥1.80m[D指人行道最外侧到相邻斜行电
                梯的运载装置或者对重(平衡重)之间的最小水平距离: 在井道的倾斜位置，H指与斜面垂直的距离]。</Text>], x:'相邻斜行电梯隔障高度', u: 'm' },
    ],
    [{check: '1.2.2.9', }],
] as EachMeasureItemConfig[][];
export const config观测数据2 = [
    [{n: '导行程要', t: ['A1.2.2.10','(1)',<Text css={{fontSize:'0.875rem'}}>曳引驱动电梯，当轿厢（运载装置）完全压缩缓冲器时，对于非斜行电梯对重导轨能够提供不小于
                           0.10+0.035v<sup>2</sup>m的进一步制导行程；对于斜行电梯对重导 轨能够提供不小于0.10+0.035v<sup>2</sup>/sinθm的进一步制导 行程；</Text>],
                                x:'制导行程要求值', u: 'm', c: '四', d: '0'},
        {n: '导行程', t: [undefined,undefined,null], x:'测量值',  },
        {n: '进一步导', t: [undefined,'(2)','强制驱动电梯，轿厢（运载装置）完全压缩下部缓冲器时，平衡重导轨能够提供不小于0.30m的进一步制导行程；'], x:'测量值', c: '四', d: '0' },
    ],
    [{check: '1.2.2.10', }],
    [{n: '坑道门高', t: ['A1.2.2.13','(3)','供人员进入底坑的通道门不向底坑内开启，其高度不小于1.80m，宽度不小于0.60m(对于斜行电梯，可以采用尺寸不小于0.80mx0.80m的活板门)；'],
                        x:'高度', u: 'm'},
        {n: '坑道门宽', t: [undefined,undefined,null], x:'宽度',  },
    ],
    [{check: '1.2.2.13(3)', }],
    [{n: '板缓顶允', t: ['A1.2.2.17','(4)','当轿厢位于顶层端站平层位置时,对重装置撞板与其缓冲器顶面间的距离不超过对重越程距离标识上标注的最大允许值。'], x:'最大允许值', u: 'mm'},
        {n: '板缓顶距', t: [undefined,undefined,null], x:'测量值',  },
    ],
    [{check: '1.2.2.17(4)', }],
    [{n: '绳直径', t: ['A1.2.5.1','(1)','钢丝绳直径不小于钢丝绳公称直径的90%；'], x:'实测钢丝绳直径', u: 'mm', c: '四', d: '0'},
        {n: '绳公称径', t: [undefined,undefined,null], x:'公称直径',  },
        {n: '绳断丝数', t: [undefined,'(2)','一个捻距内出现的断丝数不超过该条检验项目中附表的要求；'], x:'断丝数',u: '根' },
    ],
    [{check: '1.2.5.1', }],
    [{n: '顶脚板高', t: ['A1.2.6.2','(1)','由扶手、高度不小于0.10m的踢脚板和位于护栏高度1/2处的中间栏杆组成；'], x:'踢脚板高度', u: 'm', c: '四', d: '0'},
        {n: '顶扶高', t: [undefined,'(2)','当护栏扶手外侧边缘与井道壁之间的自由距离不大于0.85m时，扶手高度不小于0.70m;当自由距离大于0.85m时，扶手高度不小于1.10m；'],
                           x:'扶手高度',  },
        {n: '顶边缘距', t: [undefined,'(3)','护栏装设在距轿顶边缘最大为0.15m之内，并且扶手外侧边缘与井道中的任何部件之间的水平距离不小于0.10m。'], x:'护栏距轿顶边缘距离',u: 'm' },
        {n: '顶扶件距', t: [undefined,undefined,null], x:'扶手与部件距离',  },
    ],
    [{check: '1.2.6.2', }],
    [{n: '厢对距', t: ['A1.2.6.5','(1)','检查轿厢(运载装置)及其附联部件与对重(平衡重)及其附联部件之间的距离是否不小于50mm。'], x:'距离', u: 'mm'},
    ],
    [{check: '1.2.6.5(1)', }],
    [{n: '脚变形量', t: ['A1.2.6.10','(1)','从层站处，在护脚板垂直部分下边沿5cm2的圆形或者方形面积上施加300N的静力，其弹性变形不大于35mm；'], x:'变形量', u: 'mm', c: '四', d: '1'},
        {n: '护脚高', t: [undefined,'(2)',<Text css={{fontSize:'0.875rem'}}>对于非斜行电梯，轿厢护脚板的垂直部分高度不小于0.75m；对于斜行电梯，设有侧置轿门时，其垂直部
                分的尺寸能够保护所有可能暴露的表面；设有前置轿门时，面对较低的层站侧，垂直部分的高度不小于0.30m。</Text>], x:'护脚板高度',u: 'm' },
    ],
    [{check: '1.2.6.10', }],
    //【非常特殊】 测量结果的合并 omit 有多个组合的情况，必须分解成多个序号方式。
    [{n: '房噪声1', t: ['A1.3.14','(1)','机房噪声：电梯以额定速度运行，声音测量传感器置于距地面高1.5m、驱动主机1.0m处测试，测试点不少于3点，取平均值'],
                      x:'测量值1', u: 'dB', omit:'1.3.14（1）' },
        {n: '房噪声2', t: [undefined,undefined,null], x:'测量值2',  omit:true},
        {n: '房噪声3', t: [undefined,undefined,null], x:'测量值3',  omit:true},
        {n: '房噪背景', t: [undefined,undefined,null], x:'背景', omit:true},
    ],
    [
        {n: '厢噪上', t: [undefined,'(2)','轿厢内噪声:电梯以额定速度全程上、下运行，声音测量传感器置于轿厢内中央、距地面高1.5m处测试，取最大值；'],
                        x:'上行', u: 'dB', omit:'1.3.14（2）' },
        {n: '厢噪下', t: [undefined,undefined,null], x:'下行', omit:true  },
        {n: '厢噪背景', t: [undefined,undefined,null], x:'背景', omit:true },
    ],
    [
        {n: '开门噪', t: [undefined,'(3)','开关门噪声：声音测量传感器置于层（轿）门宽度的中央、距门0.24m、地面高1.5m处，测试开、关门过程中的噪声，取最大值；'],
                        x:'开门',u: 'dB', omit:'1.3.14（3）'},
        {n: '关门噪', t: [undefined,undefined,null], x:'关门', omit:true },
        {n: '开关背景', t: [undefined,undefined,null], x:'背景', omit:true},
    ],
    [
        {n: '层门噪上', t: [undefined,'(4)',<Text css={{fontSize:'0.875rem'}}>无机房层门处噪声:测量传感器置于驱动主机安装位置最近层站开门宽度的中部对着层门，在水平方向距门
                    扇0.5m，垂直方向距层站地面1.5m处测试，取出发端站门关闭后至到达端站门开启前，电梯全程上、下运行过程中以额定速度运行时的最大值。</Text>],
                        x:'上行', u: 'dB', omit:'1.3.14（4）' },
        {n: '层门噪下', t: [undefined,undefined,null], x:'下行', omit:true  },
        {n: '层门背景', t: [undefined,undefined,null], x:'背景', omit:true },
    ],
    [{check: '1.3.14', }],
] as EachMeasureItemConfig[][];
export const mesuZjText=<Text css={{fontSize:'0.8rem'}}>
    注：1、表中A1.2.2.3、A1.2.2.10、A1.2.2.17、A1.2.5.1、A1.2.6.5、A1.2.6.10、A1.3.14适用检验项目应记录观测数据，其他项目在测量结果有存在不符合
    时，应在相应项目“观测数据”栏记录具体测量值。<br/>
    2、本表所列项目无测量时，观测数据和测量结果可不填，但“结果判定”应填写，对不适用项目“结果判定”填 “/”。
</Text>


export const EntranceSetup =
    React.forwardRef((
        {show, alone = true, verId, rep}: InternalItemProps, ref
) => {
    const theme = useTheme();
    const atPrint = useMedia('print');
    const toast = useToast();
    const doCheckNames = React.useCallback((verId: string) => {
        const impressionismAs = setupItemAreaRoute({rep, noDefault: true, theme});
        const result = assertNamesUnique([{value: rep?.tzFields}, {value: impressionismAs?.Item, type: 'impr'},
            {value: config设备概况, type:'esnt'}, {value:[...itemA结论, ...itemA技术见证,  ] },
            {value: config观测数据, type:'mesB'}, {value: config观测数据2, type:'mesB'},
            {value:[...itemn顶空,...itemn顶空2,...itemn顶空3, ...itemn底坑,...itemn底坑2, ...itemA间隙, ...itemn平衡, ...itemA监控设施 ] },
            {value:['unq','仪器表','检验条件', ]} ]);
        toast({title: "完成！", subtitle: result ? "没发现冲突" : "测试开关没开", intent: "success"});
    }, [rep,toast,theme]);
    const {storage, setStorage} =React.useContext(EditStorageContext) as any;
    const getInpFilter = React.useCallback((par: any) => {
        const {_tblFixed, } =par||{};
        return {_tblFixed, };
    }, []);
    const {inp, setInp} = useItemInputControl({ref});
    if (atPrint) return null;
    else return (
        <InspectRecordLayout inp={inp} setInp={setInp} getInpFilter={getInpFilter} show={show} alone={alone} label={'初始化本报告，默认值配置等'}>
            {process.env.REACT_APP_TEST==='true' && <><div>
                <Text variant="h5">构建开发模板时的工具：校验模板的存储name冲突；</Text>
                <Button intent='primary' onPress={() => doCheckNames(verId!)}>校验模板name唯一性</Button>
                <Text variant="h5">设置待测试表格的各列宽度：</Text>
                <TextArea value={storage?._tblFixed || ''} rows={2} onChange={e =>{
                    JSON.parse(e.currentTarget.value??'[]');
                    setStorage({ ...storage, _tblFixed: e.currentTarget.value || undefined}); }}/>
            </div>
            </>
            }
            <hr/>
        </InspectRecordLayout>
    );
});
